Berechnung der deutschen Einkommenssteuer, des Steuersatzes und des Grenzsteuersatzes. Zugrunde liegt die Steuerfunktion von 2010-2014.
Die Steuerfunktion ist ein quadratischer Spline, aus 5 Stücken zusammengesetzt. Für Verheiratete ist aufgrund des Ehegattensplittings die Steuerlast gleich dem Doppelten des Steuersatzes bei halbierten Einkommen. Dies ist in der folgenden Funktion berücksichtigt.
>function map steuer (x:scalar, verheiratet:integer=0) ... if verheiratet then xs=x/2; f=2; else xs=x; f=1; endif if xs<8130 then return 0 elseif xs<13470 then y=(xs-8130)/10000; return (933.7*y+1400)*y*f elseif xs<52881 then y=(xs-13470)/10000; return ((228.74*y+2397)*y+1014)*f elseif xs<=250730 then return (0.42*xs-8196)*f else return (0.45*xs-15718)*f endif endfunction
Wir rechnen eine Gehaltserhöhung für einen nicht verheirateten Facharbeiter mit 40000€ Jahresgehalt durch.
Zunächst definieren wir einige Ausgaberoutinen, die uns erlauben, die Ausgabe hübscher zu formatieren.
>function prefix eu (x) := cprint(x)+" €"; >function prefix pp (x) := print(x->%,2,unit=" %");
Nun also das Bruttogehalt, die Steuer und das Nettogehalt.
>E=40000; eu E, eu steuer(E), eu E-steuer(E)
40 000.00 € 8 983.21 € 31 016.79 €
Der Steuersatz.
>pp steuer(E)/E
22.46 %
Nun dasselbe nach der Gehaltserhöhung.
>Z=40000*2%; eu E+Z, eu steuer(E+Z), eu E+Z-steuer(E+Z)
40 800.00 € 9 273.53 € 31 526.47 €
>pp steuer(E+Z)/(E+Z)
22.73 %
Von den 800€ bleiben 510€ übrig.
>eu Z-(steuer(E+Z)-steuer(E))
509.68 €
Das liegt am Grenzsteuersatz.
>pp diff("steuer",E)
36.11 %
Der Plot zeigt den Anstieg der Steuer mit dem Einkommen, die Progression (konvexe Kurve), und die Auswirkungen des Ehegattensplittings.
>shrinkwindow(>smaller); ... plot2d("steuer",0,125000); plot2d("steuer";1,add=1,color=12); ... labelbox(["ledig","verh."],colors=[black,blue],x=0.3); ... xlabel("ZvE"); ylabel("Steuer"):
Im folgenden Plot wurden die Nahtstellen zwischen den Funktionen aufgenommen, aus denen die Steuerfunktion stückweise besteht.
>shrinkwindow(); plot2d("steuer",0,125000); ... x=[7664,12739,52151,250000]; y=steuer(x); ... plot2d(x,y,points=true,add=true); insimg();
Der Steuersatz ist der Anteil der Steuer vom zu versteuernden Einkommen.
>function steuersatz (x,verheiratet=0) := steuer(x,verheiratet)/x
Der Steuersatz eines Verheirateten mit 30000 Euro Einkommen liegt bei 9.2%.
>steuersatz(30000,1)->" %"
9.2406371644 %
Der Folgende Plot vergleicht die Steuersätze zwischen Ledigen und Verheirateten.
>plot2d("steuersatz(x)*100",a=1,b=145000,c=0,d=100,title="Steuersatz"); ... plot2d("steuersatz(x,1)*100";1,add=1,color=12); ... labelbox(["ledig","verh."],colors=[black,blue]):
Der Grenzsteuersatz gibt den prozentualen Abzug von Gehaltsänderungen an.
Zunächst ein Beispiel: Das Gehalt eines Verheirateten steigt von 30000 auf 31000 Euro. Es wird 25% des Anstiegs als Steuer einbehalten. Der Steuersatz beträgt allerdings nur 10%.
>(steuer(31000,1)-steuer(30000,1))/1000->" %"
24.7843144 %
Der Grenzsteuersatz wird hier durch numerisches Ableiten des Steuersatzes berechnet.
>function grenzsteuersatz (x,verheiratet=0) := diff("steuer",x;verheiratet) >grenzsteuersatz(30000,1)->" %"
24.6699442118 %
Wir fügen zum Plot die Grenzsteuersätze hinzu.
Die Grenzsteuersätze sind in Deutschland Streckenzüge mit Unstetigkeiten beim Grundeinkommen und bei 250'000 Euro Einkommen, wo ein Sprung stattfindet von 42% auf den Maximalsatz von 45%.
>plot2d("grenzsteuersatz(x)*100",>add,style="--"); ... plot2d("grenzsteuersatz(x,1)*100",>add,color=12,style="--"); ... labelbox(["Steuersatz","verh.","Grenzsteuersatz","verh."]; ... colors=[black,blue,black,blue],styles=["-","-","--","--"]); ... xlabel("ZvE"); ylabel("%"):
Der Grenzsteuersatz ist die Steigung der Tangenten, der Steuersatz die Steigung der Geraden durch (0,0).
>plot2d("steuer",0,25000); ... x0=20000; plot2d(x0,steuer(x0),points=1,add=true); ... plot2d("steuer(x0)+grenzsteuersatz(x0)*(x-x0)",color=4,add=true,style="--"); ... plot2d("steuer(x0)+steuersatz(x0)*(x-x0)",color=6,add=true,style="--"); ... label("Grenzsteuersatz",13500,900,color=4); ... label("Steuersatz",6500,900,color=6):
Die Steuerelastizität bestimmt, um wieviel % sich die Steuerlast erhöht, wenn sich das Gehalt um 1% erhöht.
>function steuerelastizitaet (x) := grenzsteuersatz(x)*x/steuer(x); ... plot2d("steuerelastizitaet",10001,125000):
Interessanter ist oft, wieviel von 1% Gehaltserhöhung mehr in der Tasche bleibt.
>plot2d("x*0.01-(steuer(x*1.01)-steuer(x))",0,125000,n=500); ... plot2d("x*0.01-(steuer(x*1.01,1)-steuer(x,1))",add=1,n=500,color=12); ... labelbox(["ledig","verh."],colors=[black,blue],x=0.3):
Zum Vergleich rechnen wir die "Bierdeckelsteuer" durch.
Es wird angenommen, dass die Steuersätze 14%, 25%, 35%, 42%, 45% sind, und jeweils für Einkommen über 8000, 12500, 35000, 53000, 250000 Euro gelten sollen.
>function map S(X) ... S=0; if X>=250000 then S=0.45*(X-250000); X=250000; endif; if X>=53000 then S=S+0.42*(X-53000); X=53000; endif; if X>=35000 then S=S+0.35*(X-35000); X=35000; endif; if X>=12500 then S=S+0.25*(X-12500); X=12500; endif; if X>=8000 then S=S+0.14*(X-8000); endif; return S; endfunction
Zum Vergleich die geltende Steuerlast in rot.
>plot2d("steuer",1,125000,color=2); ... plot2d("S",add=1,title="Zu zahlende Steuer"); ... insimg;
Im folgenden Plot sieht man die Differenz zwischen den Steuermodellen in Form der "Entlastung".
>plot2d("steuer(x)-S(x)",1,125000,title="Entlastung"):
Der Steuersatz steigt immer noch monoton. Zum Vergleich der alte Steuersatz in rot.
>function SS(X) := Smap(X)/X; ... plot2d("steuersatz(x)*100",1,125000,color=2); ... plot2d("SS(x)*100",add=1,title="Steuersatz"):
Der Grenzsteuersatz ist aufgrund der Konstruktion natürlich in den Sprüngen unstetig.
>function dS(X) := diff("S",X); ... plot2d("grenzsteuersatz(x)*100",1,125000,color=2); ... plot2d("dS(x)*100",add=1,n=500,title="Grenzsteuersatz"):
In der Elastizität entstehen Unstetigkeiten bei den Sprüngen.
>function SE(X) := dS(X)*X/S(X); ... plot2d("SE",11000,125000,n=500,title="Elastizität der Steuer"):
Wieviel bleibt von 1% Gehaltserhöhung übrig?
>plot2d("(1-dS(x))*x/100",0,125000,n=500, ... title="Zugewinn bei 1% Gehaltswachstum"):